package business;

import org.hibernate.Session;
import org.hibernate.Transaction;

import utils.HibernateUtil;
import entities.Genre;
import entities.Boek;
import entities.Lid;
import exceptions.NoEntityException;

public class BoekAanmaker implements IEntityAanmaker<Boek> {
	Boek boek;

	private int id;
	private String titel;
	private String omschrijving;
	private boolean uitleenbaar;
	// private Set<Auteur> auteurs;
	private Genre genre;
	private int isbn;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getTitel() {
		return titel;
	}

	public void setTitel(String titel) {
		this.titel = titel;
	}

	public boolean isUitleenbaar() {
		return uitleenbaar;
	}

	public void setUitleenbaar(boolean uitleenbaar) {
		this.uitleenbaar = uitleenbaar;
	}

	public String getOmschrijving() {
		return omschrijving;
	}

	public void setOmschrijving(String omschrijving) {
		this.omschrijving = omschrijving;
	}

	public Genre getGenre() {
		return genre;
	}

	public void setGenre(Genre genre) {
		this.genre = genre;
	}

	public int getIsbn() {
		return isbn;
	}

	public void setIsbn(int isbn) {
		this.isbn = isbn;
	}

	@Override
	public Boek createEntity() {
		boek = new Boek(titel, omschrijving);
		boek.setIsbn(isbn);
		boek.setGenre(genre);
		boek.setIsUitleenbaar(uitleenbaar);

		return boek;
	}

	@Override
	public boolean saveEntity() {
		try {
			if (boek == null) {
				throw new NoEntityException();
			}
		} catch (NoEntityException e) {
			e.printStackTrace();
			return false;
		}

		Session session = null;
		Transaction tx = null;

		try {
			// get a session
			session = HibernateUtil.getSessionFactory().openSession();

			// Start a tx
			tx = session.beginTransaction();
			
			boek.setGenre((Genre)session.merge(boek.getGenre()));
			
			session.save(boek);

			// Commit the changes
			tx.commit();
		} catch (RuntimeException e) {
			e.printStackTrace();

			if (tx != null)
				tx.rollback();

			// the boek has not been added, so return false.
			return false;
		} finally {
			if (session != null) {
				session.close();
			}
		}

		return true;
	}

}